1 Training Objective

2 Introduction

2.1 Artificial Neural Network

Neural network atau artificial neural network (ANN) adalah metode machine learning yang terinspirasi dari cara kerja otak manusia. Otak bekerja dengan suatu sistem saraf (biological neural network). Terdapat 2 hal utama dari sistem saraf manusia yang diadopsi oleh neural network: arsitektur & proses belajar yang dilakukan.

Beberapa aplikasi Deep Learning:

  • Facial Recognition
  • Speech Recognition
  • Instagram Filter
  • Forecasting
  • Text Summarization
  • Detect Product Defect from Image
  • in-game AI

Image Filter

The Machine Behind Instagram Filter

Detect Defect in Product Using Image Recognition

  1. < a href = “https://rpubs.com/Argaadya/semiconductor” > Detect Defect Using Sensor Information

  2. Computer Vision

Deep Learning for Self Driving Cars

Deep Learning in Self-Driving Cars

The New Star of AI : GPT-3

GPT-3 adalah model Neural Network yang dilatih dengan menggunakan data banyak teks bahasa inggris yang diambil dari internet. GPT-3 dikembangkan oleh OpenAI, salah satu perusahaan yang didirkan oleh Elon Musk.

Demo:

  1. GPT-3 API Demo

  2. GPT-3 Generate Python Code

  3. Komparasi GPT-3 dengan otak manusia

2.2 Library and Setup

Berikut beberapa library yang akan kita gunakan:

# Data Wrangling
library(dplyr)

# Neural Network
library(neuralnet)

# Model Evaluation
library(caret)

# Set Graphic Theme
theme_set(theme_minimal())

options(scipen = 999)

3 🚀 Flashback Machine Learning

Kita refresh kembali materi awal tentang model regresi, baik regresi linear dan regresi logistik agar nantinya lebih familiar perbedaannya dengan arsitektur neural network. 🤔✨

3.1 📊 Linear Regression

Misalkan kita punya data untuk memprediksi harga rumah dengan variabel seperti berikut:

df_linear <- read.csv("data_input/house_price.csv")

str(df_linear)
#> 'data.frame':    100 obs. of  4 variables:
#>  $ age            : num  35.9 13.3 1.8 35.5 9.1 6.4 25.9 3.1 0 12.3 ...
#>  $ distance_to_mrt: num  641 562 1456 641 1402 ...
#>  $ num_conv_store : int  3 5 1 3 0 9 0 5 9 1 ...
#>  $ price          : num  61.5 54.8 27 40.8 43.2 62.2 22.1 56.2 50.8 29.5 ...

🔍 Data Description:

  • age : usia rumah
  • distance_to_mrt : jarak ke stasiun MRT terdekat
  • num_conv_store : jumlah toko kelontong di lingkungan sekitar
  • price : kisaran harga rumah

Sekarang, kita buat model regresi linear untuk memprediksi harga rumah.

# Membuat model regresi linear
model_linear <- lm(price ~ ., data = df_linear)
model_linear
#> 
#> Call:
#> lm(formula = price ~ ., data = df_linear)
#> 
#> Coefficients:
#>     (Intercept)              age  distance_to_mrt   num_conv_store  
#>       45.759308        -0.346455        -0.005375         1.240674

3.1.1 💡 Hasil Model

Persamaan regresi linear yang dihasilkan:

\[price = 45.75 - 0.34\ age - 0.01\ distance\ to\ MRT + 1.24\ convenience\ store\]

3.1.2 👉 Penjelasan

Pada regresi linear, nilai target (Y) dihitung sebagai penjumlahan bobot (koefisien) dikalikan nilai variabel. Formula matematisnya:

\[\hat y = W_0 + \Sigma_{i=1}^m{x_i\ W_i}\] ### 📉 Ilustrasi

Grafik berikut menunjukkan bagaimana prediktor memengaruhi price. 🔢

3.2 🧩 Logistic Regression

Sekarang kita coba masalah klasifikasi. Kali ini, kita ubah variabel target (price) menjadi kategori: low dan high.

df_kategori <- read.csv("data_input/house_price_2.csv")

str(df_kategori)
#> 'data.frame':    100 obs. of  4 variables:
#>  $ age            : num  7.1 8.5 11.8 6.4 13.2 9.1 0 2.6 16.9 38.2 ...
#>  $ distance_to_mrt: num  451.2 104.8 533.5 90.5 150.9 ...
#>  $ num_conv_store : int  5 5 4 9 7 0 1 4 0 2 ...
#>  $ price          : int  1 1 1 1 1 1 1 1 0 0 ...

🔍 Data Description:

  • age : usia rumah
  • distance_to_mrt : jarak ke stasiun MRT terdekat
  • num_conv_store : jumlah toko kelontong di lingkungan sekitar
  • price : kategori harga rumah
    • 1 = high
    • 0 = low

Sekarang, mari kita buat model regresi logistik:

# Membuat model regresi logistik
model_logit <- glm(price ~ ., data = df_kategori, family = "binomial")
model_logit
#> 
#> Call:  glm(formula = price ~ ., family = "binomial", data = df_kategori)
#> 
#> Coefficients:
#>     (Intercept)              age  distance_to_mrt   num_conv_store  
#>        5.103873        -0.093332        -0.003873         0.004009  
#> 
#> Degrees of Freedom: 99 Total (i.e. Null);  96 Residual
#> Null Deviance:       138 
#> Residual Deviance: 61.09     AIC: 69.09

3.2.1 💡 Hasil Model

Pada regresi logistik, nilai log of odds dihitung dengan formula berikut:

\[g(x) = 5.10 - 0.09\ age - 0.004\ distance\ to\ MRT + 0.004\ num\ convenience\ store\]

👉 Selanjutnya, hasil ini diubah menjadi probabilitas (range 0-1) menggunakan fungsi sigmoid:

\[P(price) = \frac{1}{1 + e^{-g(x)}}\]

3.2.2 📉 Ilustrasi

Grafik berikut menunjukkan perbedaan utama antara regresi linear dan logistik:

  • Linear: Prediksi langsung berupa nilai.
  • Logistik: Hasil dikonversi menjadi peluang menggunakan sigmoid.


3.3 ❓ Knowledge Check

Apa kesamaan model regresi logistik dan regresi linear dari segi pemrosesan datanya? 🤔

Dalam mempelajari pola data, regresi akan menghasilkan persamaan regresi berdasarkan coefficient ___________________________________

🌼Quick Summary : 🌼

✨Recall Linear Regression & Logistic Regression ✨

Linear Regresi :

  • Objective: Melakukan prediksi terhadap nilai numerik
  • Interpretasi: Melakukan interpretasi berdasarkan nilai coefficient hasil model

Logistic Regression :

  • Objective: Melakukan prediksi terhadap nilai kategorical
    • Mengubah rentang -Inf s/d Inf menjadi 0-1
  • Interpretasi: Di interpretasi dengan menggunakan nilai coefficient log of odds

4 🤖 Neural Network

4.1 🧠 Arsitektur Neural Network

Jaringan saraf buatan terinspirasi oleh sistem saraf manusia! Sistem saraf ini terdiri dari banyak neuron, yang bekerja bersama membentuk jaringan. Tiap stimulus (seperti suara, sentuhan, atau cahaya) diterima oleh panca indra, diproses di otak, lalu menghasilkan respon.

Sama seperti tubuh manusia yang memproses stimulus menjadi respon, neural network juga memproses input menjadi output. 🚀

Arsitektur ini menginspirasi pengembangan model neural network. Berikut adalah visualisasi bagaimana informasi dialirkan melalui jaringan ini:

4.1.1 ⚙️ Komponen Utama Neural Network

Model neural network terdiri dari lapisan-lapisan yang bekerja seperti sistem saraf:

  1. Input Layer 🌟

    • Layer pertama, tempat data awal (variabel X) masuk.
    • Jumlah neuron = jumlah fitur pada data.
  2. Hidden Layer 🔍

    • Lapisan di antara input dan output.
    • Jumlah lapisan dan neuron ditentukan oleh user.
    • Di sinilah “keajaiban” pemrosesan terjadi.
  3. Output Layer 🎯

    • Layer terakhir, menghasilkan output (prediksi atau klasifikasi).
    • Jumlah neuron = jumlah target variabel.

Setiap layer terdiri dari node/neuron yang saling terhubung melalui weight/bobot, dan beberapa layer memiliki bias untuk membantu pergeseran fungsi aktivasi.

4.1.2 📝 Karakteristik Neural Network

  • Fully Connected: Semua node di satu layer terhubung ke node di layer berikutnya.
  • Node/Neuron: Menyimpan nilai, diilustrasikan sebagai bulatan.
  • Weight/Bobot: Menghubungkan node satu sama lain, diilustrasikan sebagai garis.

4.1.3 📊 Contoh Arsitektur Neural Network

Berikut adalah contoh arsitektur neural network untuk kasus klasifikasi harga rumah:

4.2 🏠 Kasus Regresi

Mari kita buat model Neural Network untuk memprediksi harga rumah berdasarkan data price. Kita akan menggunakan package neuralnet.

4.2.1 📦 Parameter Penting di neuralnet

  • formula: Menentukan target variabel (contoh: price) dan prediktor.
  • data: Dataset yang digunakan untuk membangun model.
  • hidden: Jumlah node yang digunakan di hidden layer.
  • rep: Jumlah pengulangan model yang ingin dibuat.

4.2.2 🛠️ Membuat Model Neural Network

4.2.2.1 Dengan Hidden Layer

Kita mulai dengan model yang memiliki hidden layer:

# Membuat model NN dengan hidden layer
regression_nn <- neuralnet(formula = price ~ .,
                           data = df_linear,
                           hidden = 6,
                           rep = 3)
plot(regression_nn, rep="best")

4.2.2.2 Tanpa Hidden Layer

Selanjutnya, kita coba membangun model tanpa hidden layer. Ini untuk membandingkan hasilnya dengan regresi linear.

# Membuat model NN tanpa hidden layer
regression_nn <- neuralnet(formula = price ~ .,
                           data = df_linear,
                           hidden = 0, # tanpa hidden layer
                           rep = 3)
plot(regression_nn, rep="best")

4.2.3 📊 Membandingkan dengan Model Regresi Linear

Sekarang, kita bandingkan hasil dari neural network tanpa hidden layer dengan model regresi linear yang sudah kita buat:

# Model regresi linear sebelumnya
model_linear
#> 
#> Call:
#> lm(formula = price ~ ., data = df_linear)
#> 
#> Coefficients:
#>     (Intercept)              age  distance_to_mrt   num_conv_store  
#>       45.759308        -0.346455        -0.005375         1.240674

4.3 🏷️ Kasus Klasifikasi

Sekarang, mari kita buat model Neural Network untuk kasus klasifikasi dengan target variabel price (high/low).

4.3.1 📦 Parameter Tambahan untuk Kasus Klasifikasi

  • err.fct: Fungsi perhitungan error.
    • ce (Cross-Entropy): Digunakan untuk klasifikasi biner (2 kelas).
  • act.fct: Fungsi aktivasi pada output layer.
    • logistic: Mengubah hasil menjadi probabilitas antara 0 dan 1.
  • linear.output:
    • FALSE: Untuk kasus klasifikasi (bukan output berupa angka).

4.3.2 🛠️ Membuat Model Neural Network

4.3.2.1 Dengan Hidden Layer

Kita mulai dengan membuat model klasifikasi Neural Network yang memiliki hidden layer:

# Model NN dengan hidden layer
# model_klasifikasi <- neuralnet(formula = price ~ .,
#                            data = df_kategori,
#                            hidden = 5,
#                            linear.output = F, # supaya tidak menghasilkan output yang linear
#                            act.fct = "logistic", # fungsi aktivasi untuk mengubah menjadi bentuk probabiliti
#                            err.fct = "ce", # fungsi error, klassifikasi = cross-entropy
#                            rep = 3)
# 
# plot(model_klasifikasi, rep = "best")

4.3.2.2 Tanpa Hidden Layer

Untuk membandingkan, mari kita buat model Neural Network tanpa hidden layer:

# Model NN tanpa hidden layer
model_klasifikasi <- neuralnet(formula = price ~ .,
                           data = df_kategori,
                           hidden = 0, # tanpa hidden layer
                           linear.output = F, # supaya tidak menghasilkan output yang linear
                           act.fct = "logistic", # fungsi aktivasi untuk mengubah menjadi bentuk probabiliti
                           err.fct = "ce", # fungsi error, klassifikasi = cross-entropy
                           rep = 3)

plot(model_klasifikasi, rep = "best")

4.3.3 📊 Membandingkan dengan Model Regresi Logistik

Kita cek kembali model regresi logistik yang sudah dibuat sebelumnya:

# Model regresi logistik sebelumnya
model_logit
#> 
#> Call:  glm(formula = price ~ ., family = "binomial", data = df_kategori)
#> 
#> Coefficients:
#>     (Intercept)              age  distance_to_mrt   num_conv_store  
#>        5.103873        -0.093332        -0.003873         0.004009  
#> 
#> Degrees of Freedom: 99 Total (i.e. Null);  96 Residual
#> Null Deviance:       138 
#> Residual Deviance: 61.09     AIC: 69.09

Kita telah mengetahui tentang neural network. Namun apa hubungannya dengan Deep Learning?

4.4 🔍 Deep Learning

Deep Learning adalah perkembangan dari Neural Network dengan karakteristik utama berupa penambahan hidden layer yang lebih dari satu.

4.4.1 📌 Poin Penting Tentang Deep Learning

  • Deep Learning adalah Neural Network dengan arsitektur yang lebih kompleks (lebih dari satu hidden layer).
  • Jumlah neuron (node) dan jumlah hidden layer berpengaruh besar pada performa model.
  • Efek penambahan hidden layer:
    • Dapat menurunkan error jika model dapat menangkap pola yang lebih kompleks.
    • Dapat meningkatkan error jika model menjadi overfitting atau terlalu kompleks untuk masalah yang dihadapi.

4.4.2 🛠️ Contoh Deep Learning

4.4.2.1 1. Deep Learning untuk Klasifikasi

# Deep Learning untuk klasifikasi
model_klasifikasi_deep <- neuralnet(formula = price ~ .,
                           data = df_kategori,
                           hidden = c(5, 3),
                           linear.output = F, # supaya tidak menghasilkan output yang linear
                           act.fct = "logistic", # fungsi aktivasi untuk mengubah menjadi bentuk probabiliti
                           err.fct = "ce", # fungsi error, klassifikasi = cross-entropy
                           rep = 3)

# plot(model_klasifikasi_deep, rep = "best")

4.4.2.2 2. Deep Learning untuk Regresi

# Deep Learning untuk regresi
nn_reg_deep <- neuralnet(formula = price ~ .,
                           data = df_linear,
                           hidden = c(5,3), # tanpa hidden layer
                           rep = 3)
plot(nn_reg_deep, rep="best")

4.5 🔮 Prediksi Output

Untuk melakukan prediksi menggunakan model Neural Network, kita menggunakan fungsi compute() alih-alih predict().

4.5.1 ⚙️ Langkah Prediksi

  1. Gunakan model Neural Network yang sudah dibuat.
  2. Tentukan variabel prediktor (covariate) untuk data yang ingin diprediksi.
  3. Simpan hasil prediksi ke dalam objek net.result.

4.5.2 Contoh Kasus Klasifikasi

# Prediksi menggunakan Deep Learning
pred <- compute(x = model_klasifikasi_deep, covariate = df_kategori)

# Hasil prediksi
pred$net.result
#>                 [,1]
#>   [1,] 0.54555326240
#>   [2,] 0.54555326234
#>   [3,] 0.54555326240
#>   [4,] 0.54555325719
#>   [5,] 0.54555326240
#>   [6,] 0.54555326240
#>   [7,] 0.54555326240
#>   [8,] 0.54555326240
#>   [9,] 0.54555326240
#>  [10,] 0.54555326240
#>  [11,] 0.54555326240
#>  [12,] 0.54555326240
#>  [13,] 0.54555325654
#>  [14,] 0.54555326240
#>  [15,] 0.54555326240
#>  [16,] 0.54555326240
#>  [17,] 0.54555326240
#>  [18,] 0.54555326240
#>  [19,] 0.54555326240
#>  [20,] 0.54555326240
#>  [21,] 0.54555326240
#>  [22,] 0.54555326240
#>  [23,] 0.54555326240
#>  [24,] 0.54555326240
#>  [25,] 0.54555326240
#>  [26,] 0.54555326240
#>  [27,] 0.54555326240
#>  [28,] 0.54555326240
#>  [29,] 0.54555326240
#>  [30,] 0.54510093452
#>  [31,] 0.54555326240
#>  [32,] 0.54555326240
#>  [33,] 0.54555326240
#>  [34,] 0.54555326240
#>  [35,] 0.54555326240
#>  [36,] 0.54555326240
#>  [37,] 0.54555326240
#>  [38,] 0.54555326240
#>  [39,] 0.54555326240
#>  [40,] 0.54555326240
#>  [41,] 0.54555326240
#>  [42,] 0.54555326240
#>  [43,] 0.54555326240
#>  [44,] 0.54555326240
#>  [45,] 0.00004969441
#>  [46,] 0.54555326240
#>  [47,] 0.54555326240
#>  [48,] 0.54555326240
#>  [49,] 0.54555326240
#>  [50,] 0.54555326240
#>  [51,] 0.54555326240
#>  [52,] 0.54555326236
#>  [53,] 0.54555326240
#>  [54,] 0.54555326240
#>  [55,] 0.54555326240
#>  [56,] 0.54555326240
#>  [57,] 0.54555326240
#>  [58,] 0.54555326240
#>  [59,] 0.54555326240
#>  [60,] 0.54555326240
#>  [61,] 0.54555326240
#>  [62,] 0.54555326240
#>  [63,] 0.54555326240
#>  [64,] 0.54555255155
#>  [65,] 0.54555325641
#>  [66,] 0.54555326240
#>  [67,] 0.54555326240
#>  [68,] 0.54555326240
#>  [69,] 0.54555326240
#>  [70,] 0.54555326240
#>  [71,] 0.54555325749
#>  [72,] 0.54555326240
#>  [73,] 0.54555326240
#>  [74,] 0.54555326240
#>  [75,] 0.54555326240
#>  [76,] 0.54555326240
#>  [77,] 0.54555326240
#>  [78,] 0.54555326240
#>  [79,] 0.54555326240
#>  [80,] 0.54555326240
#>  [81,] 0.54555326240
#>  [82,] 0.54555326240
#>  [83,] 0.54555326240
#>  [84,] 0.54555326240
#>  [85,] 0.54555326240
#>  [86,] 0.54555326240
#>  [87,] 0.54555326240
#>  [88,] 0.54555326240
#>  [89,] 0.54555326240
#>  [90,] 0.54498694271
#>  [91,] 0.54555326240
#>  [92,] 0.54555326240
#>  [93,] 0.54555326240
#>  [94,] 0.54555325719
#>  [95,] 0.54555326240
#>  [96,] 0.54555326240
#>  [97,] 0.54555326240
#>  [98,] 0.54555326240
#>  [99,] 0.54555326240
#> [100,] 0.54555326240

4.6 📊 Evaluasi Model

4.6.1 Mengubah Probabilitas Menjadi Kelas

Untuk klasifikasi biner, hasil probabilitas perlu dikonversi menjadi kelas (0 atau 1) menggunakan ambang batas (misalnya, 0.5):

# Konversi probabilitas menjadi kelas
pred_kelas <- ifelse(pred$net.result > 0.5 , yes = 1, no = 0)
head(pred_kelas)
#>      [,1]
#> [1,]    1
#> [2,]    1
#> [3,]    1
#> [4,]    1
#> [5,]    1
#> [6,]    1

4.7 ✨ Komponen Output Neural Network

Neural Network menghasilkan beberapa informasi penting yang dapat digunakan untuk evaluasi model:

  • $call: Menampilkan kode pembuatan model.
  • $response: Data target variabel.
  • $covariate: Data prediktor.
  • $net.result: Hasil prediksi target.
  • $result.matrix: Detail informasi akhir model (bias, weight, error, dll.).

4.8 📚 Proses Pembelajaran Neural Network

Neural Network bekerja dengan mengurangi kesalahan (error) dari prediksi dan memperbarui bobot (weight) untuk meningkatkan akurasi. Proses ini disebut epoch dan terdiri dari dua fase:

4.8.1 1. Feed Forward

Proses di mana model mencoba memprediksi nilai target y berdasarkan bobot yang ada.

4.8.2 2. Back Propagation

Setelah memprediksi, model menghitung kesalahan dan memperbarui bobot agar prediksi lebih akurat.

4.8.3 Langkah-langkah Proses Pembelajaran

  1. Inisialisasi Bobot
    Bobot dan bias dimulai dengan nilai acak.

  2. Feed Forward
    Data input diproses untuk menghasilkan prediksi (y’).

  3. Menghitung Error
    Kesalahan dihitung dengan membandingkan prediksi dan nilai sebenarnya.

  4. Back Propagation
    Error yang dihitung digunakan untuk memperbarui bobot.

  5. Update Bobot
    Bobot diperbarui dan proses ini diulang sampai error sekecil mungkin.

4.8.4 💡 Istilah Penting dalam Pembelajaran Neural Network

  • Activation Function: Fungsi yang digunakan untuk memproses output dari setiap node, misalnya sigmoid atau ReLU.

  • Forward Propagation: Proses di mana data berjalan melewati jaringan untuk menghasilkan prediksi.

  • Backpropagation: Proses memperbaiki bobot berdasarkan error dari prediksi.

  • Cost Function: Mengukur seberapa besar kesalahan antara prediksi dan data sebenarnya, misalnya Cross-Entropy untuk klasifikasi.

  • Epoch: Satu putaran penuh dari proses Feed Forward dan Back Propagation.

Dengan proses ini, Neural Network “belajar” untuk membuat prediksi yang lebih tepat dari waktu ke waktu.

4.9 🏄 Dive Deeper 1

  1. Tinjau model neural network di atas:
  1. model terdiri dari tipe layer apa saja, dan berapa jumlah layer untuk masing-masing tipe?
- Layer input  : 3 nodes
- Layer hidden : 4 nodes
- Layer output : 1 node
  1. Mengapa digunakan set.seed saat membuat model neural network?

supaya memiliki nilai random yang sama dengan partner kerja yang menjalan kode-nya juga, sehingga nanti menghasilkan nilai output yg sama juga

  1. Apabila ditambahkan variabel prediktor numeric baru sejumlah 2, perbedaan apa yang dimiliki model baru dibandingkan model di atas?

Yang berubah adalah jumlah nodes pada input layer, menjadi 5 nodes.

  1. Kapan neural network tidak cocok untuk digunakan?
  • Jika dataset nya terlalu kecil
  • Datanya tidak kompleks
  • Bagus untuk data yang memiliki pola kompleks
  • Bagus untuk data unstructured

bobot bisa dikatakan adalah faktor untuk menentukan penting tidaknya suatu data


4.10 Feed Forward

Feed Forward adalah proses di mana model memprediksi nilai target berdasarkan bobot dan bias yang ada. Dalam proses ini, model menerima input dari setiap prediktor atau fitur, kemudian data ini diolah sesuai dengan bobot yang ada di setiap neuron/node, ditambah dengan nilai bias. Perubahan skala data, yang ditandai dengan S pada hidden layer dan output layer, terjadi karena penggunaan Activation Function seperti fungsi Sigmoid.

4.11 Activation Function

Activation Function berfungsi untuk mentransformasi input sebelum diteruskan ke layer berikutnya sesuai dengan kebutuhan model. Fungsi ini membantu:

  • Menjaga agar output sesuai format yang diperlukan, misalnya untuk klasifikasi biner (output 0-1).
  • Membatasi nilai yang diteruskan ke node-node berikutnya agar tidak terlalu besar, yang bisa memperberat komputasi.

💡 Beberapa jenis Activation Function:

  • Linear

    • Cocok untuk output layer ataupun hidden layer (default) pada kasus regresi (range: -∞ ~ ∞).
    • Pengaturan: linear.output = T (default).

  • Sigmoid / Logistic

    • Cocok untuk output layer pada klasifikasi biner (range: 0 ~ 1).
    • Pengaturan: linear.output = F & act.fct = "logistic".

  • Softmax

    • Cocok untuk output layer pada klasifikasi multiclass (range: 0 ~ 1).
    • Fungsi Softmax memberikan nilai peluang untuk setiap kelas, dan totalnya akan berjumlah 1. Data akan diklasifikasikan ke kelas dengan peluang tertinggi.

  • ReLU (Rectified Linear Unit)

    • Cocok di hidden layer untuk kasus data citra/gambar (range: 0 ~ ∞).

  • Tanh (Hyperbolic Tangent)

    • Cocok di hidden layer saat banyak prediktor yang memiliki nilai negatif (range: -1 ~ 1).


4.11.0.1 🔎 Knowledge Check Activation Function

  • ❓Apa activation function yang cocok untuk kasus regresi dengan target variabel numerik?

act fct pada output layer -> linear

  • ❓Apa activation function yang cocok untuk kasus klasifikasi dengan target variabel adalah kategori dengan 5 kelas?

act fct pada output layer -> softmax


4.12 Lost Function / Cost Function (Error)

Cost function adalah nilai acuan kebaikan model; nilai untuk mengevaluasi kebaikan model; dapat juga dianalogikan sebagai error. Model dapat “belajar” dengan mengetahui cost function yang harus ia gunakan untuk mengevaluasi dirinya sendiri. Cost function yang digunakan berbeda untuk tiap kasus:

  • regresi:

    • sum of squared error(sse)
    • setting parameter: neuralnet(..., err.fct="sse")

\[SSE = \frac{1}{2} {\Sigma (y - \hat y)^2}\]

  • klasifikasi:

    • cross-entropy error (ce)
    • setting parameter: neuralnet(..., err.fct="ce")

\[Binary\ Cross-Entropy = -p(x)\ log\ q(x) + (1-p(x))\ log\ (1-q(x))\]

4.12.1 🔎 Knowledge Check Activation Function and Loss Function

❓ Apabila kita ingin memprediksi tingkat kepuasan suatu pelanggan yang mana ada 3 parameter yaitu: tidak puas, biasa saja, puas; jenis activation function dan loss function apa yang cocok digunakan?

  • Activation function –> softmax
  • Loss function –> ce

4.13 Back Propagation

Back Propagation adalah proses mengupdate bobot berdasarkan informasi yang didapatkan dari error hasil prediksi. Informasi yang dicari adalah informasi tentang nilai update yang optimal dengan menggunakan nilai gradient, sehingga metodenya disebut dengan Gradient Descent. Untuk mengatur seberapa cepat dan detail model belajar, nilai Learning Rate dapat diatur. Semakin kecil learning rate, semakin detail model belajar. Nilai yang biasa digunakan untuk Learning Rate adalah 0.01.

\[W_k = W_{k-1} - \alpha \frac{\partial\ E}{\partial\ W_{k-1}} = W_{k-1} - \alpha \nabla g(W_{k-1}) \]

Keterangan:

\(W_k\) : Bobot pada iterasi k

\(W_{k-1}\) : Bobot pada iterasi k-1

\(\alpha\) : Learning rate

\(\frac{\partial\ E}{\partial\ W_{k-1}}\) : Partial derivative/turunan parsial

\(\nabla g(W_{k-1})\) : gradient dari iterasi k-1

Gradient Descent akan membuat model belajar mencari nilai dari masing-masing bobot yang tepat sehingga mendapatkan error yang semakin kecil.

4.13.1 Learning Rate

Learning rate yang besar akan membuat model belajar lebih cepat dengan jumlah step yang lebih sedikit, namun kemungkinan besar akan melewatkan titik terendahnya sehingga tidak bisa mencapai nilai error yang optimal. Learning rate yang kecil akan membuat model mengupdate bobot sedikit demi sedikit sehingga kemungkinan untuk melewatkan titik terendah/titik optimalnya lebih kecil. Namun, jika model sudah menyentuh local optima atau titik terendah di antara dua area yang lebih tinggi errornya, model akan sulit untuk lepas dari area tersebut sehingga terdapat kemungkinan juga model tidak bisa mendapatkan global optima atau error yang paling rendah. Pemilihan learning rate adalah salah satu hal yang penting dalam membuat Neural Network.

Apabila Bapak/Ibu tertarik dengan matematika di balik Gradient Descent, dapat mengunjungi website berikut .

Contoh perhitungan update bobot ada di FAQ Algotech

https://askalgo.netlify.app/#mathematics-concept

Misalkan kita punya fungsi berikut dari sebuah model:

\[ f(x) = x^2 \]

Gradient Descent menggunakan konsep turunan/derivatif untuk mencari nilai error yang optimal. Maka, kita bisa menurunkan fungsi di atas menjadi sebagai berikut:

\[ f'(x) = 2x \]

Untuk mengupdate bobot barunya, kita mengatur seberapa besar perubahan bobotnya menggunakan learning rate (\(\alpha\)):

\[ x\ baru = x\ - \alpha\ 2 x\]

Misal bobot yang sekarang adalah 4 dan learning rate = 0.1

\[bobot\ baru = 4 - 0.1\times 2\times 4 = 3.2\]

Jika learning rate semakin kecil, perubahan bobotnya juga akan semakin kecil juga, contohnya dengan learning rate = 0.01

\[bobot\ baru = 4 - 0.01\times 2\times 4 = 3.92\]

Dalam melakukan training data menggunakan neural network, tugas kita adalah:

  1. Membuat arsitektur
    • Input layer
    • Hidden layer: berapa layer, dan berapa nodes di tiap layernya
    • Output layer
  2. Menentukan activation function
    • Output layer: tergantung kasusnya
    • Hidden layer: optional
  3. Error function: Tergantung kasusnya
    • Regresi: sse
    • Klasifikasi: ce
  4. Tambahan nilai yang bisa kita tentukan
    • Learning rate
    • Optimizer

  • Kita telah belajar banyak terminologi selama mempelajari arsitektur dan cara kerja deep learning. Coba cocokan terminologi-terminologi di bawah ini!
  1. neuron/node: b. tempat penyimpanan informasi atau nilai

  2. input layer: a. layer berisi node yang menerima informasi dari variabel prediktor

  3. hidden layer: g. layer berisi node tempat informasi di proses

  4. output layer: c. layer berisi node yang mengeluarkan hasil prediksi

  5. weight: f. bobot tiap node; koefisien yang dikalikan dengan nilai dari variable prediktor

  6. bias: e. nilai intercept

  7. feed forward: d. aliran informasi melalui input-hidden-output layer; aliran informasi

  8. back propagation: h. aliran informasi untuk memperbaiki/mengupdate bobot; aliran informasi dari output ke hidden layer

  9. cost function: k. nilai kebaikan model yang dijadikan bahan evaluasi model; selisih antara nilai aktual dengan prediksi.

  10. step / epoch: j. 1 kali tahapan feed forward dan back propagation

  11. activation function: i. fungsi untuk melakukan scaling atau transformasi nilai pada node, sebelum nilai dilanjutkan ke node berikutnya

4.13.2 Paremeter di neuralnet

  1. Formula.

  2. Data.

  3. hidden: defaultnya adalah 1.

  4. threshold: batas minimum error yang harus dicapai. Defaultnya adalah 0,01.

  5. rep: jumlah tipe model yang ingin dibuat. Defaultnya adalah 1.

  6. err.fct: menentukan jenis cost function yang digunakan. Pada packages neuralnet disediakan 2 jenis saja. Yaitu SSE (Sum square error), dan ce (Cross Entropy). SSE digunakan ketika kasus kita regresi. Sedangkan ce digunakan ketika kasusnya klasifikasi. Defaultnya adalah SSE.

  7. act.fct: menentukan jenis activation function yang digunakan. Ada berbagai macam jenisnya: Sigmoid, softmax, ReLU, tanh. Perbedaan masing-masing jenisnya terdapat pada interval nilai yang dihasilkan. Defaultnya adalah Sigmoid/logistic.

  8. linear.output: sebuah logical, ketika TRUE maka outputnya akan diteruskan secara linear (regresi). Kalau pilihannya FALSE maka outputnya akan ditransformasikan menggunakn activation function (klasifikasi). Defaultnya linearoutput = TRUE.

  • Panduan Model Building dan Tuning

    • Nodes pada input layer: sejumlah prediktor yang kita miliki
    • Nodes pada output layer:
      • regresi = 1
      • klasifikasi = sejumlah kelas variabel target
    • Hidden layer
      • Jumlah hidden layer (how deep):
        • Model lebih kompleks
        • Waktu training lama
        • Percobaan pertama bisa 2 layer terlebih dahulu
      • Jumlah node pada hidden layer (how wide)
        • Terlalu banyak bisa menghasilkan overfitting
        • Bisa pakai angka kelipatan 2^n (2,4,8,16,32,64, dst…), atau sekitar 2/3 jumlah prediktor
        • Jumlah mengerucut semakin ke output layer
      • Error functionnya : diganti sesuai dengan kasus pada target variable
        • regresi sse
        • klasifikasi cross enthropy (ce)
          • 2 kelas binary
          • lebih dari 2 kelas, multi-class
    • Activation function
      • Ouput Layer
        • Linear
          • Range -inf ~ + inf
          • Untuk regresi
        • Sigmoid
          • range 0~1
          • cocok untuk kasus binari klasifikasi
        • Softmax
          • range 0~1
          • cocok untuk multiclas
      • Hidden Layer
        • ReLu
          • range 0 ~ inf
          • cocok untuk data gambar / image
          • sering digunakan pada hidden layer
          • menghilangkan efek negatif pada data
        • tanh
          • range -1 ~ 1
          • cocok untuk prediktor yang banyak negatifnya
    • alpha atau learning rate : untuk mengatur kecepatan belajar dari neural network

— End of Day 2—